﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using FrbaCommerce.Clases;

namespace FrbaCommerce.Generar_Publicacion
{
    public partial class GenerarPublicacion : Form
    {
        DateTime fechaSistema = Properties.Settings.Default.FechaSistema.ToUniversalTime();
        Publicacion p;
        Usuario user;
        bool modo;
        public GenerarPublicacion(Usuario user, Publicacion p, bool modo)
        {
            InitializeComponent();
            this.user = user;
            this.p = p;
            this.modo = modo;
            p.cargarCodPublicacion(txtCodPub);
            CargarCombos();
            if (modo)
            {
                CargarPublicacion();
                
                switch (cmbEstados.Text)
                { 
                    case "Borrador"://Permite modificar todo
                        {
                            CargarRubrosSeleccionados(this.p.rubros);
                            lblLimpiarCampos.Enabled = true;
                            break;
                        }
                    
                    case "Activa":
                        {
                            listRubros.Enabled = false;                           
                            CargarRubrosSeleccionados(this.p.rubros);
                            dateTimePicker1.Enabled = false;
                            nmcPrecio.ReadOnly = true;
                            cmbTipo.Enabled = false;
                            radioBtnNo.Enabled = false;
                            radioBtnSi.Enabled = false;
                            cmbVisibilidad.Enabled = false;
                            cmbEstados.Items.Remove("Borrador");
                            if (cmbTipo.Text=="Subasta")
                            {
                                txtStock.ReadOnly = true;
                                txtDescripcion.ReadOnly = true;
                            }
                            break;
                        }
                    case "Pausada":
                        {
                            cmbEstados.Items.Remove("Borrador");
                            listRubros.Enabled = false;
                            CargarRubrosSeleccionados(this.p.rubros);
                            dateTimePicker1.Enabled = false;
                            nmcPrecio.ReadOnly = true;
                            cmbTipo.Enabled = false;
                            radioBtnNo.Enabled = false;
                            radioBtnSi.Enabled = false;
                            txtStock.Enabled = false;
                            txtDescripcion.Enabled = false;
                            cmbVisibilidad.Enabled = false;
                            break;
                        }
                    case "Finalizada":
                        {
                            txtDescripcion.Enabled = false;
                            txtStock.Enabled = false;
                            listRubros.Enabled = false;
                            CargarRubrosSeleccionados(this.p.rubros);
                            dateTimePicker1.Enabled = false;
                            nmcPrecio.ReadOnly = true;                            
                            cmbTipo.Enabled = false;
                            cmbVisibilidad.Enabled = false;
                            radioBtnNo.Enabled = false;
                            radioBtnSi.Enabled = false;                            
                            cmbEstados.Enabled = false;
                            btnPublicar.Enabled = false;
                            btnCancelar.Text = "Volver";
                            break;
                        }
                }
            }            
        }    

        private void btnPublicar_Click(object sender, EventArgs e)
        {
            if (VerificarCampos())
            {                
                this.LlenarPublicacion();
                if (!modo)
                {
                    if (cmbVisibilidad.Text == "Gratis" && cmbEstados.Text=="Activa" && this.p.VerificarVisibilidadGratuita(this.user.Id) == 2 && MessageBox.Show("¿Está seguro de que quiere utilizar su ultima visibilidad gratis?\n", "Advertencia", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.No)
                    {
                        return;
                    }
                    this.p.GuardarPublicacion(this.p, cmbEstados.Text, cmbVisibilidad.Text, cmbTipo.Text, this.user.userName);
                    PublicacionRubro p_r = new PublicacionRubro();
                    p_r.GuardarPublicacion_Rubro(this.p);
                    MessageBox.Show("Los datos han sido ingresados al sistema.", "Confirmacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }
                else //EDITAR
                {                    
                    this.p.Editar(this.p);
                    if (listRubros.Enabled == true)
                    {
                        PublicacionRubro rubrosNuevos = new PublicacionRubro();
                        rubrosNuevos.BorrarRubros(this.p.codigo);
                        rubrosNuevos.GuardarPublicacion_Rubro(this.p);
                    }                    
                    MessageBox.Show("Los datos han sido ingresados al sistema.", "Confirmacion", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    this.Close();
                }                
            }
        }

        private void cmbTipo_SelectionChanged(object sender, EventArgs e)
        {
            if (cmbTipo.Text == "Subasta")
            {
                label6.Location = new Point(370, 65);
                label6.Text = "Valor Inicial";
            }
            else
            {
                label6.Text = "Precio";
                label6.Location = new Point(393, 65);
            }
        }

        private bool VerificarCampos()
        {
            string mensaje = VerificarCamposVacios();
            DateTime fecha = new DateTime();
            FuncionesComunes funciones = new FuncionesComunes();
            if (mensaje.Length != 0)
            {
                MessageBox.Show("El/los siguientes campos son obligatorios.\n" + mensaje, "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            else if (!funciones.validacionFecha(dateTimePicker1.Value.ToString(), out fecha))
            {
                MessageBox.Show("La fecha es inválida.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            else if (listRubros.SelectedItems.Count==0)
            {
                MessageBox.Show("Seleccione los Rubros para esta Publicación.", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return false;
            }
            else if (modo)
            {
                if (Convert.ToInt32(txtStock.Text)<this.p.stock)
                {
                    MessageBox.Show("No puede dismuir el Stock que ya se tenia", "Advertencia", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    txtStock.Text = this.p.stock.ToString();
                    return false;
                }
                else
                {
                    return true;
                }               
            }
            else
            {
                return true;
            }           
        }

        private void LlenarPublicacion()
        {
            this.p.codigo = Convert.ToInt32(txtCodPub.Text);
            this.p.descripcion = txtDescripcion.Text;
            this.p.fecha = dateTimePicker1.Value;           
            this.p.monto = nmcPrecio.Value;//Convert.ToDecimal(txtPrecio.Text);
            this.p.stock = Convert.ToInt32(txtStock.Text);
            if (radioBtnSi.Checked)
            {
                this.p.preg_habilitadas = true;
            }
            else
            {
                this.p.preg_habilitadas = false;
            }
            this.p.rubros = new List<Rubro>();
            foreach (String rubro in listRubros.SelectedItems)
            {
                Rubro r = new Rubro();
                r.descripcion = rubro;
                r.codigo = r.BuscarIdRubroPorDescripcion(rubro);
                this.p.rubros.Add(r);
            }
            //this.p.id_rubro = new Rubro().BuscarIdRubroPorDescripcion(cmbRubro.Text);
            this.p.id_estado = new EstadoPublicacion().BuscarIdPublicacion(cmbEstados.Text);
            this.p.id_usuario = this.user.Id;
            this.p.id_visibilidad = new Visibilidad().BuscarIdPorDescripcion(cmbVisibilidad.Text);
            Visibilidad v = new Visibilidad();
            v = v.ObtenerVisibilidadPorCod(p.id_visibilidad);
            DateTime fecha = dateTimePicker1.Value;
            fecha = fecha.AddDays(v.duracion);
            dateTimePicker2.Value = fecha;
            this.p.fecha_venc = dateTimePicker2.Value;
            this.p.tipo = new TipoPublicacion().BuscarIdPublicacion(cmbTipo.Text);            
        }

        private void CargarPublicacion()
        {
            txtCodPub.Text = this.p.codigo.ToString();
            txtDescripcion.Text = this.p.descripcion;
            txtStock.Text = this.p.stock.ToString();
            cmbTipo.Text = new TipoPublicacion().BuscarDescripcionPublicacion(this.p.tipo);
            foreach (Rubro rubro in this.p.rubros)
            {
                listRubros.Items.Add(rubro.descripcion);
            }
            dateTimePicker1.Value = this.p.fecha;
            this.dateTimePicker2.Value = this.p.fecha_venc;
            cmbVisibilidad.Text = new Visibilidad().ObtenerVisibilidadPorCod(this.p.id_visibilidad).descripcion;
            cmbEstados.Text = new EstadoPublicacion().ObtenerDescripcion(this.p.id_estado);
            nmcPrecio.Value = this.p.monto;
            if (this.p.preg_habilitadas)
            {
                radioBtnSi.Checked = true;
            }
            else
            {
                radioBtnNo.Checked = true;
            }                
        }

        private void CargarCombos()
        {
            TipoPublicacion tipo = new TipoPublicacion();
            tipo.cargarComboTipos(cmbTipo);
            EstadoPublicacion estado = new EstadoPublicacion();
            estado.cargarComboEstados(cmbEstados);
            Visibilidad visibilidad = new Visibilidad();
            visibilidad.cargarCombo(cmbVisibilidad);            

            Rubro rubro = new Rubro();
            rubro.CargarListaRubro(listRubros);        
        }


        private void txtInicio_TextChanged(object sender, EventArgs e)
        {
            //DateTime fecha = Convert.ToDateTime(txtFechaInicio.Text, new CultureInfo("es-ES")); 
            //fecha = fecha.AddDays(7);
            //txtVencimiento.Text = fecha.ToString("ddMMyyyy");
        }

        private string VerificarCamposVacios()
        { 
            FuncionesComunes funciones= new FuncionesComunes();
            string mensaje, mensajeAmostrar = "";
            mensaje = funciones.verificarCampoVacio(txtDescripcion, "Descripcion");
            txtDescripcion = funciones.colorearTextBox(txtDescripcion, mensaje);
            mensajeAmostrar += mensaje;
            
            mensaje = funciones.verificarCampoVacio(nmcPrecio, "Precio");
            if (nmcPrecio.Value==0)
            {
                nmcPrecio.BackColor = Color.Red;
            }
            
            //txtPrecio = funciones.colorearTextBox(nmcPrecio, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarCampoVacio(txtDescripcion, "Stock");
            txtStock = funciones.colorearTextBox(txtStock, mensaje);
            mensajeAmostrar += mensaje;   

            mensaje = funciones.verificarComboVacio2(cmbEstados, "Estados");
            cmbEstados = funciones.colorearComboBox(cmbEstados, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarComboVacio2(cmbTipo, "Tipo");
            cmbTipo = funciones.colorearComboBox(cmbTipo, mensaje);
            mensajeAmostrar += mensaje;

            mensaje = funciones.verificarComboVacio2(cmbVisibilidad, "Visibilidad");
            cmbVisibilidad = funciones.colorearComboBox(cmbVisibilidad, mensaje);
            mensajeAmostrar += mensaje;

            if (!radioBtnNo.Checked && !radioBtnSi.Checked)
            {
                mensajeAmostrar += "- Permitir Preguntas \n";
            }
            return mensajeAmostrar;
        }        

        private void LimpiarCampos() 
        {
            nmcPrecio.Value = 0;
            nmcPrecio.BackColor = Color.White; ;
            txtStock.Text = String.Empty;
            txtStock.BackColor = Color.White;
            txtDescripcion.Text = String.Empty;
            txtDescripcion.BackColor = Color.White;
            cmbEstados.Text = String.Empty;
            cmbEstados.BackColor = Color.White;            
            cmbTipo.Text = String.Empty;
            cmbTipo.BackColor = Color.White;
            cmbVisibilidad.BackColor = Color.White;
            cmbVisibilidad.Text = String.Empty;
            nmcPrecio.Value = 0;
            nmcPrecio.BackColor = Color.White;
        }

        private void txtStock_KeyPress(object sender, KeyPressEventArgs e)
        {
            FuncionesComunes f = new FuncionesComunes();
            f.keyPressNumeros(e);
        }

        private void lblLimpiarCampos_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            LimpiarCampos();
        }

        private void GenerarPublicacion_Load(object sender, EventArgs e)
        {
            if (modo)
            {
                this.Text= "Editar Publicación";
                this.btnPublicar.Text = "Guardar";
                lblLimpiarCampos.Enabled = false;
                if (cmbEstados.Text=="Borrador")
                {
                    if (this.p.VerificarVisibilidadGratuita(this.user.Id) >= 3)
                    {
                        cmbVisibilidad.Items.Remove("Gratis");
                    }                    
                }
            }
            else
            {
                if (this.p.VerificarVisibilidadGratuita(this.user.Id) >= 3)
                {
                    cmbVisibilidad.Items.Remove("Gratis");
                }
            }
        }

        public void CargarRubrosSeleccionados(List<Rubro> rubros)
        {
            foreach (Rubro r in rubros)
            {
                listRubros.SelectedItems.Add(r.descripcion);
            }            
        }

        private void cmbVisibilidad_SelectedIndexChanged(object sender, EventArgs e)
        {
            Visibilidad v = new Visibilidad();
            v.codigo = new Visibilidad().BuscarIdPorDescripcion(cmbVisibilidad.Text);
            v = v.ObtenerVisibilidadPorCod(v.codigo);
            DateTime fecha = dateTimePicker1.Value;
            dateTimePicker2.Value = fecha.AddDays(v.duracion);
        }        
    }
}
